// 云函数模板
// 部署：在 cloud-functions/login 文件夹右击选择 “上传并部署”

const cloud = require('wx-server-sdk');

// 初始化 cloud
cloud.init({
  // API 调用都保持和云函数当前所在环境一致
  env: cloud.DYNAMIC_CURRENT_ENV
});

/**
 * 这个示例将经自动鉴权过的小程序用户 openid 返回给小程序端
 *
 * event 参数包含小程序端调用传入的 data
 *
 */
exports.main = async (event, context) => {
  console.log('[login event]:', event);
  console.log('[login context]:', context);

  // 可执行其他自定义逻辑
  // console.log 的内容可以在云开发云函数调用日志查看

  // 获取 WX Context (微信调用上下文)，包括 OPENID、APPID、及 UNIONID（需满足 UNIONID 获取条件）等信息
  const wxContext = cloud.getWXContext();

  const db = cloud.database();

  // 获取参加的活动列表，通过user和activity联表查询
  const activities = await db.collection('activity').aggregate()
    .lookup({
      from: 'user',
      localField: 'creatorId',
      foreignField: 'id',
      as: 'creatorFile'
    })
    .lookup({
      from: 'user',
      localField: 'joiners.id',
      foreignField: 'id',
      as: 'users'
    })
    .sort({
      time: -1,
    })
    .end();

  // 合并users和joiners，把joiners里的score放到users里
  activities.list.forEach(activity => {
    activity.users.map((item, index) => {
      activity.users[index] = {...item, ...activity.joiners[index]}
    });

    activity.creatorFile = activity.creatorFile[0];
  });

  return {
    event,
    openid: wxContext.OPENID,
    appid: wxContext.APPID,
    unionid: wxContext.UNIONID,
    env: wxContext.ENV,
    activities
  };
}
